package org.sauceggplant;

/**
 * 数组列表实现
 *
 * @author jacob
 * @date 2025/6/6 14:52
 */
public class ArrayList {

    /**
     * 数据
     */
    private Node[] data;

    /**
     * 长度
     */
    private int length;

    /**
     * 容量
     */
    private int capacity;

    /**
     * 数组列表初始化
     *
     * @return 数组列表指针.NULL-数组列表初始化失败
     */
    public ArrayList initArrayList() {
        ArrayList list = new ArrayList();
        list.length = 0;
        list.capacity = 10;
        list.data = new Node[10];
        return list;
    }

    /**
     * 数组列表销毁
     *
     * @param list 数组列表指针
     * @return true-数组列表销毁成功;false-数组列表销毁失败
     */
    public boolean destroyArrayList(ArrayList list) {
        list.data = null;
        list = null;
        return true;
    }

    /**
     * 数组列表长度
     *
     * @param list 数组列表指针
     * @return 数组列表长度
     */
    public int sizeArrayList(ArrayList list) {
        return list.length;
    }

    /**
     * 数组列表容量
     *
     * @param list 数组列表指针
     * @return 数组列表容量
     */
    public int capacityArrayList(ArrayList list) {
        return list.capacity;
    }

    /**
     * 数组列表是否为空
     *
     * @param list 数组列表指针
     * @return true-数组列表为空;false-数组列表不为空
     */
    public boolean isEmptyArrayList(ArrayList list) {
        return list == null || list.length == 0;
    }

    /**
     * 数组列表插入节点
     * (时间复杂度O(n))
     *
     * @param list 数组列表指针
     * @param index 索引位置
     * @param value 待插入数组列表的节点
     * @return true-插入节点到数组列表成功;false-插入节点到数组列表失败
     */
    public boolean insertArrayList(ArrayList list, int index, Node value) {
        //TODO
        return false;
    }

    /**
     * 数组列表删除节点
     * (时间复杂度O(n))
     *
     * @param list 数组列表指针
     * @param index 索引位置
     * @return true-数组列表删除节点成功;false-数组列表删除节点失败
     */
    boolean removeArrayList(ArrayList list, int index) {
        //TODO
        return false;
    }

    /**
     * 数组列表获取节点
     (时间复杂度O(1))
     *
     * @param list 数组列表指针
     * @param index 索引位置
     * @return Node*-节点指针
     */
    Node getArrayList(ArrayList list, int index) {
        //TODO
        return null;
    }

    /**
     * 数组列表设置节点
     * (时间复杂度O(1))
     *
     * @param list 数组列表指针
     * @param index 索引位置
     * @return true-数组列表设置节点成功;false-数组列表设置节点失败
     */
    boolean setArrayList(ArrayList list, int index, Node value) {
        //TODO
        return false;
    }

    public Node[] getData() {
        return data;
    }

    public void setData(Node[] data) {
        this.data = data;
    }

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }

    public int getCapacity() {
        return capacity;
    }

    public void setCapacity(int capacity) {
        this.capacity = capacity;
    }
}
